In a computer system operating under control of the UNIX operating system, user terminal devices provide the principle interface to human operators. In order to make this interface as responsive as possible, input and output (I/O) operations to these user terminal devices are handled with special techniques. These techniques are generally described below. A more detailed description is contained in a book by M. C. Shaw et al. entitled UNIX Internals A Systems Operation Handbook, Tab Books, Blue Ridge Summit, Pa., at pages 131-145, which pages are hereby incorporated by reference.
In normal operation, the UNIX operating system maintains three character lists (clists) for each user terminal device. One of these clists, the output clist, contains data which is to be sent to the terminal device for display. A second clist, the raw input clist, contains the data, in raw form, provided by the user terminal This data is in the form of keystrokes. If, for example, a first character were typed and then replaced by a second character through the use of the backspace key, the raw data would contain indications that the first key was pressed, followed by the backspace key and then the second key.
The third clist, the canonical data clist, contains data from the user terminal that has been canonically processed. Canonical processing converts the keystroke data into character data. In so doing, it fixes the data to incorporate the effects of editing keystrokes such as backspace, line feed and delete-line.
In responding to requests to send data to or receive data from a user terminal, the host processor in a typical UNIX based computer system processes the data one character at a time. The host processor is interrupted as each keystroke is made at the user terminal, it then loads the keystrokes into the raw clist. When a carriage return keystroke has been received or when a sufficient number of keystrokes have accumulated, the host processor reads out the keystrokes, one at a time, to perform the canonical processing.
I/O operations from the user terminals are thus handled with a priority that is relatively high in comparison to other tasks running on the host processor. These operations are handled in this manner to ensure that the user perceives an acceptable level of responsiveness from the computer.
This "hands on" approach to managing user terminal devices may result in a relatively large portion of the processing resources of the computer being monopolized by these terminal I/O operations. Monopolization of this type may occur, for example, when a number of user terminals request the display of a relatively large amount of data, while users at other terminals are simultaneously inputting relatively large amounts of data into their terminals.
One solution to this problem has been to couple so-called "intelligent" terminal processors to the host system. These processors collect keystrokes in an internal buffer, and pass the buffer to the host processor when an certain event has occurred. These events may include, for example, a carriage return keystroke, a pause between keystrokes that is greater than a preset maximum, or the collection of a predetermined number of keystrokes. Whenever one of these events occurs, the terminal processor transfers the collected block of characters to the raw clist in the host processor. The host processor then canonically processes the keystrokes to produce the character data for the canonical data clist.
Thus, although the host processor has been relieved of the burden of handling character-by-character interrupts from the user terminals, it still performs the canonical processing on the keystrokes and implements any control functions needed to operate the terminals. In addition, the host still responds to interrupts generated by the "intelligent" terminal processors which indicate, for example, that data is ready for transfer to the host. Even this reduced level of interaction between the host and the remote user terminals may produce a significant reduction in the apparent performance of the entire computer system.
Furthermore, even in this configuration, many UNIX based computer systems are unable to handle terminal devices which are periodically polled to effect data transfer. These terminals do not generate interrupts to control data transfer. This type of terminal may be handled by a UNIX based computer having terminal I/O functions that are modified to allow polling of the remote devices. Alternatively, hardware may be added between the terminal and the host to periodically poll the terminals and simulate interrupts to the host processor at the appropriate times.